/**
 * Copyright ©2003~2019年4月7日 szkingdom
 * @author raohj
 * @date 2019年4月7日
 * @file RList.java
 * @comment : please input your comment to this file
 * @version : input version
 * @modify:
 * 		1、 2019年4月7日 由 raohj 新建文件
 */
package com.ccnu.demojava.collection;

import java.util.*;

/**
 * @author raohj
 * @date 2019年4月7日
 * @version 
 * @comment to add your comment
 */
public class RList {
	private static int MAX_ELEMENT = 10;
	private static String[] sContent = new String[MAX_ELEMENT];
	
	static {
		for (int i = 0; i < sContent.length; i++) {
			sContent[i] = new String("TEST" + i);
		}
	}
	/**
	 * @author raohj
	 * @date 2019年3月30日
	 * @comment 列表测试
	 * @param 
	 * @return 
	 */
	public static void list() {
		// 测试Vector,支持多线程，内部为数组实现,增长时为*2增长
		Vector<String> v = new Vector<>(2);
		for(int i=0; i<MAX_ELEMENT; i++) {
			String s = "TEST";
			v.add(s);
		}
		System.out.println("=======打印Vector=======");
		printValue(v.iterator());
		
		// 测试ArrayList,不支持多线程，内部为数组实现，增长为*1.5增长
		ArrayList<String> al = new ArrayList<String>();
		for(int i=0; i<MAX_ELEMENT; i++) {
			String s = "TEST";
			al.add(s);
		}
		System.out.println("=======打印ArrayList=======");
		printValue(al.iterator());
		
		// 测试LinkedList，实现链表
		LinkedList<String> ll = new LinkedList<>();
		for(int i=0; i<MAX_ELEMENT; i++) {
			String s = "TEST";
			ll.add(s);
		}
		System.out.println("=======打印LinkedList=======");
		printValue(ll.iterator());
	}
	
	/**
	 * @author raohj
	 * @date 2019年4月7日
	 * @comment LIFO 后进先出
	 * @param 
	 * @return 
	 */
	public static void Stack() {
		// 测试Stack,集成至Vector实现栈的后进先出
		Stack<String> stack = new Stack<>();
		for(int i=0; i<MAX_ELEMENT; i++) {
			stack.add(sContent[i]);
		}
		System.out.println("=======打印stack=======");
		printValue(stack.iterator());
		
		System.out.println("弹出元素"+stack.pop());
	}
	
	/**
	 * @author raohj
	 * @date 2019年3月30日
	 * @comment 测试队列
	 * 			{@link ArrayDeque} 普通队列, 先进先出
	 * 			{@link PriorityQueue} 优先级队列, 排序输出
	 * @param 
	 * @return 
	 */
	public static void Queue() {
		// ArrayDeque双向队列
		ArrayDeque<String> ad = new ArrayDeque<>();
		for(int i=0; i<MAX_ELEMENT; i++) {
			ad.add(sContent[i]);
		}
		System.out.println("=======打印ArrayDeque=======");
		printValue(ad.iterator());
		System.out.println("队首弹出元素" + ad.poll());
		System.out.println("队尾弹出元素" + ad.pop());
		System.out.println("first：" + ad.getFirst());
		System.out.println("last：" + ad.getLast());
		
		//PriorityQueue 优先级队列，入队时会初步排序。出队时排序
		PriorityQueue<String> pq = new PriorityQueue<>();
		for (int i = 0; i < sContent.length; i++) {
			pq.add(sContent[i]);
		}
		pq.add("TEST01");
		System.out.println("=======打印PriorityQueue=======");
		while(!pq.isEmpty()) {
			System.out.println(pq.poll());
		}
		printValue(pq.iterator());		
	}

	/**
	 * @author raohj
	 * @date 2019年3月30日
	 * @comment 打印值
	 * @param 
	 * @return 
	 * @param iterator
	 */
	public static void printValue(Iterator<String> iterator) {
		for (; iterator.hasNext();) {
			String string = (String) iterator.next();
			System.out.println(string);
		}
	}
}
